package leetcode;

public class Lc371 {


    /**
     * 等式一： a + b = a ⊕ b + (a & b) << 1
     * 把 a ⊕ b 用 A代替， (a & b) << 1 用 B代替,即 a ⊕ b = A, (a & b) << 1 = B
     * 则 a + b = A + B, 根据等式1得， A + B = A ⊕ B + (A & B) << 1
     * 由此可以看出这是一个循环 的过程，循环终止条件就是 + 两边有一个等于0 就不用再加下去了
     *
     */
    public int getSum(int a, int b) {

        while (b != 0 && a != 0) {
            int carry = (a & b) << 1;
            a = a ^ b;
            b = carry;
        }
        return a == 0 ? b : a;
    }


}